const db = require('../db/index')
const fs = require("fs");
const moment = require('moment');
const path = require("path")

// 检测是否存在目标文件夹，有则存入，无则新建
let mkdirs = (dirname, callback) => {
  fs.stat(dirname, function (e) {
    if (!e) {
      callback();
    } else {
      mkdirs(path.dirname(dirname), function () {
        fs.mkdir(dirname, callback);
      })
    }
  })
}

// 上传img-cover
exports.uploadimgCover = async (req, res) => {
  // 将上传时间设置为目录名
  let timepath = moment().format('YYYY-MM-DD');
  // 将随机数添加到文件名
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  //获取oldName
  let oldName = req.files[0].filename;
  //获取文件原名
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  // 后端源文件存放位置
  const publicUrl = '..\/public\/';
  // 后端文件存放的目标位置
  const imgUrl = 'uploads\/images\/publishProject-image-cover\/'
  const simpleImgUrl = '\/images\/publishProject-image-cover\/'
  // 拼接后完整的文件原路径
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  // 拼接后完整的文件新路径
  const newPathToFile = path.join(__dirname, publicUrl, imgUrl, timepath, newName)
  // 调用方法 新建文件夹 移动文件
  mkdirs(path.join(__dirname, publicUrl, imgUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    // 将文件访问路径返回给前端
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + imgUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleImgUrl, timepath, newName),
    });
  })
}

// 删除img-cover
exports.deleteimgCover = (req, res) => {
  const filename = req.body?.filename;
  const fileUrl = req.body?.fileUrl;
  fs.stat(fileUrl, (err) => {
    if (!err) {
      fs.unlink(fileUrl, (e) => {
        if (e) {
          return res.myMsg(e, 500)
        }
      })
    } else {
      return res.myMsg('封面不存在或已删除!',500)
    }
  })

  return res.myMsg('封面取消上传成功!', 200)
}

// 上传img
exports.uploadimg = async (req, res) => {
  // 将上传时间设置为目录名
  let timepath = moment().format('YYYY-MM-DD');
  // 将随机数添加到文件名
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  //获取oldName
  let oldName = req.files[0].filename;
  //获取文件原名
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  // 后端源文件存放位置
  // const publicUrl = 'F:\\code\\Graduation-project\\node_backend\\public\\';
  const publicUrl = '..\/public\/';
  // 后端文件存放的目标位置
  const imgUrl = 'uploads\/images\/publishProject-image\/'
  const simpleImgUrl = '\/images\/publishProject-image\/'
  // 拼接后完整的文件原路径
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  // 拼接后完整的文件新路径
  const newPathToFile = path.join(__dirname, publicUrl, imgUrl, timepath, newName)
  // 调用方法 新建文件夹 移动文件
  mkdirs(path.join(__dirname, publicUrl, imgUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    // 将文件访问路径返回给前端
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + imgUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleImgUrl, timepath, newName),
    });
  })
}

// 上传file
exports.uploadfile = async (req, res) => {
  let timepath = moment().format('YYYY-MM-DD');
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  let oldName = req.files[0].filename;//获取名字
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  const publicUrl = '..\/public\/';
  const fileUrl = 'uploads\/files\/publishProject-file\/'
  const simpleFileUrl = '\/files\/publishProject-file\/'
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  const newPathToFile = path.join(__dirname, publicUrl, fileUrl, timepath, newName)
  // fs.renameSync(pathToFile, newPathToFile);//改图片的名字注意此处一定是一个路径，而不是只有文件名
  mkdirs(path.join(__dirname ,publicUrl, fileUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + fileUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleFileUrl, timepath, newName),
    });
  })
}

// 删除file
exports.deletefile = (req, res) => {
  const filename = req.body?.filename;
  const fileUrl = req.body?.fileUrl;
  fs.stat(fileUrl, (err) => {
    if (!err) {
      fs.unlink(fileUrl, (e) => {
        if (e) {
          return res.myMsg(e, 500)
        }
      })
    } else {
      return res.myMsg('文件不存在或已删除!',500)
    }
  })

  return res.myMsg('文件取消上传成功!', 200)
}

// 委托
// 上传img-cover
exports.uploadimgEntCover = async (req, res) => {
  // 将上传时间设置为目录名
  let timepath = moment().format('YYYY-MM-DD');
  // 将随机数添加到文件名
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  //获取oldName
  let oldName = req.files[0].filename;
  //获取文件原名
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  // 后端源文件存放位置
  const publicUrl = '..\/public\/';
  // 后端文件存放的目标位置
  const imgUrl = 'uploads\/images\/publishEntrust-image-cover\/'
  const simpleImgUrl = '\/images\/publishEntrust-image-cover\/'
  // 拼接后完整的文件原路径
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  // 拼接后完整的文件新路径
  const newPathToFile = path.join(__dirname, publicUrl, imgUrl, timepath, newName)
  // 调用方法 新建文件夹 移动文件
  mkdirs(path.join(__dirname, publicUrl, imgUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    // 将文件访问路径返回给前端
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + imgUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleImgUrl, timepath, newName),
    });
  })
}
// 删除img-cover
exports.deleteimgEntCover = (req, res) => {
  const filename = req.body?.filename;
  const fileUrl = req.body?.fileUrl;
  fs.stat(fileUrl, (err) => {
    if (!err) {
      fs.unlink(fileUrl, (e) => {
        if (e) {
          return res.myMsg(e, 500)
        }
      })
    } else {
      return res.myMsg('封面不存在或已删除!',500)
    }
  })

  return res.myMsg('封面取消上传成功!', 200)
}
// 上传img
exports.uploadimgEnt = async (req, res) => {
  // 将上传时间设置为目录名
  let timepath = moment().format('YYYY-MM-DD');
  // 将随机数添加到文件名
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  //获取oldName
  let oldName = req.files[0].filename;
  //获取文件原名
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  // 后端源文件存放位置
  // const publicUrl = 'F:\\code\\Graduation-project\\node_backend\\public\\';
  const publicUrl = '..\/public\/';
  // 后端文件存放的目标位置
  const imgUrl = 'uploads\/images\/publishEntrust-image\/'
  const simpleImgUrl = '\/images\/publishEntrust-image\/'
  // 拼接后完整的文件原路径
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  // 拼接后完整的文件新路径
  const newPathToFile = path.join(__dirname, publicUrl, imgUrl, timepath, newName)
  // 调用方法 新建文件夹 移动文件
  mkdirs(path.join(__dirname, publicUrl, imgUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    // 将文件访问路径返回给前端
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + imgUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleImgUrl, timepath, newName),
    });
  })
}
// 上传file
exports.uploadfileEnt = async (req, res) => {
  let timepath = moment().format('YYYY-MM-DD');
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  let oldName = req.files[0].filename;//获取名字
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  const publicUrl = '..\/public\/';
  const fileUrl = 'uploads\/files\/publishEntrust-file\/'
  const simpleFileUrl = '\/files\/publishEntrust-file\/'
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  const newPathToFile = path.join(__dirname, publicUrl, fileUrl, timepath, newName)
  // fs.renameSync(pathToFile, newPathToFile);//改图片的名字注意此处一定是一个路径，而不是只有文件名
  mkdirs(path.join(__dirname ,publicUrl, fileUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + fileUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleFileUrl, timepath, newName),
    });
  })
}
// 删除file
exports.deletefileEnt = (req, res) => {
  const filename = req.body?.filename;
  const fileUrl = req.body?.fileUrl;
  fs.stat(fileUrl, (err) => {
    if (!err) {
      fs.unlink(fileUrl, (e) => {
        if (e) {
          return res.myMsg(e, 500)
        }
      })
    } else {
      return res.myMsg('文件不存在或已删除!',500)
    }
  })

  return res.myMsg('文件取消上传成功!', 200)
}

// 用户
// 上传用户头像
exports.uploadimgUserPic = async (req, res) => {
  // 将上传时间设置为目录名
  let timepath = moment().format('YYYY-MM-DD');
  // 将随机数添加到文件名
  let time = Date.now() + parseInt(Math.random() * 999) + parseInt(Math.random() * 2222);
  //获取oldName
  let oldName = req.files[0].filename;
  //获取文件原名
  let originalname = req.files[0].originalname;//originnalname其实就是你上传时候文件起的名字
  //给新名字加上原来的后缀
  let newName = time + originalname;
  // 后端源文件存放位置
  const publicUrl = '..\/public\/';
  // 后端文件存放的目标位置
  const imgUrl = 'uploads\/avatar\/'
  const simpleImgUrl = '\/avatar\/'
  // 拼接后完整的文件原路径
  const pathToFile = path.join(__dirname, publicUrl, oldName)
  // 拼接后完整的文件新路径
  const newPathToFile = path.join(__dirname, publicUrl, imgUrl, timepath, newName)
  // 调用方法 新建文件夹 移动文件
  mkdirs(path.join(__dirname, publicUrl, imgUrl, timepath), function () {
    fs.renameSync(pathToFile, newPathToFile);
    // 将文件访问路径返回给前端
    return res.send({
      err: 0,
      url: "http://127.0.0.1:3000/" + imgUrl + timepath + '\/' + newName,
      filename: newName,
      fileUrl: newPathToFile,
      simpleUrl: path.join(simpleImgUrl, timepath, newName),
    });
  })
}
